package com.dingwen.treasure.kettle.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.dingwen.treasure.kettle.enums.FileTypeEnum;
import com.dingwen.treasure.kettle.enums.TaskStateEnum;
import com.dingwen.treasure.kettle.enums.TaskTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 任务信息表
 * @author dingwen
 */
@TableName(value ="task_info")
@ApiModel(value = "TaskInfo", description = "任务信息表")
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class TaskInfo implements Serializable {

    @TableField(exist = false)
    private static final long serialVersionUID = 261815038333555783L;

    /**
     * 数据库主键（雪花Id）
     */
    @TableId(value = "task_id",type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = " 数据库主键")
    private Long taskId;

    /**
     * 任务code标识
     */
    @TableField(value = "task_code")
    @ApiModelProperty(value = " 任务code标识")
    private String taskCode;

    /**
     * 创建时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createTime;

    /**
     * cron表达式
     */
    @TableField(value = "cron_expression")
    @ApiModelProperty(value = "cron表达式")
    private String cronExpression;

    /**
     * 失败次数
     */
    @TableField(value = "fail")
    @ApiModelProperty(value = " 失败次数")
    private Integer fail;

    /**
     * 任务执行类 全类名，Job类
     */
    @TableField(value = "full_class_name")
    @ApiModelProperty(value = " 任务执行类 全类名，Job类")
    private String fullClassName;

    /**
     * jobDataMap json格式
     */
    @TableField(value = "job_data_map")
    @ApiModelProperty(value = " jobDataMap json格式")
    private String jobDataMap;

    /**
     *  job组名称
     */
    @TableField(value = "job_group_name")
    @ApiModelProperty(value = "job组名称")
    private String jobGroupName;

    /**
     * job 名称
     */
    @TableField(value = "job_name")
    @ApiModelProperty(value = "job 名称")
    private String jobName;

    /**
     * 任务名称
     */
    @TableField(value = "task_name")
    @ApiModelProperty(value = "任务名称")
    private String taskName;

    /**
     * 是否启用 1-启用 0-禁用
     */
    @TableField(value = "task_state")
    @ApiModelProperty(value = "是否启用 1-启用 0-禁用")
    private TaskStateEnum taskState;

    /**
     * 成功执行次数
     */
    @TableField(value = "success")
    @ApiModelProperty(value = "成功执行次数")
    private Integer success;

    /**
     * 触发器组名称
     */
    @TableField(value = "trigger_group_name")
    @ApiModelProperty(value = " 触发器组名称")
    private String triggerGroupName;

    /**
     * 触发器名称
     */
    @TableField(value = "trigger_name")
    @ApiModelProperty(value = "触发器名称")
    private String triggerName;

    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 文件Id
     */
    @TableField(value = "file_id")
    @ApiModelProperty(value = "文件Id")
    private String fileId;

    /**
     * 乐观锁版本号
     */
    @TableField(value = "version")
    @ApiModelProperty(value = "乐观锁版本号")
    @Version
    private Integer version;

    /**
     * 逻辑删除：0删除 1存在
     */
    @TableField(value = "deleted")
    @ApiModelProperty(value = "逻辑删除：0删除 1存在")
    @TableLogic(value = "1",delval = "0")
    private Integer deleted;

    /**
     * 任务类型：1一次性任务 2周期性任务
     */
    @TableField(value = "task_type")
    @ApiModelProperty(value = "任务类型：1一次性任务 2周期性任务")
    private TaskTypeEnum taskType;

    /**
     * 文件类型：1作业 2转换
     */
    @TableField(value = "file_type")
    @ApiModelProperty(value = "文件类型：1作业 2转换")
    private FileTypeEnum fileType;
}